package com.study.services;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.study.model.mdao.MoneybackplanMapper;
import com.study.model.mdao.OrderFormMapper;
import com.study.model.mdao.PaymentrecordMapper;

@Service
@Transactional(rollbackOn = Exception.class)
public class MoneyBackPlanService {

	@Autowired
	MoneybackplanMapper mapper;
	@Autowired
	OrderFormMapper formMapper;
	@Autowired
	PaymentrecordMapper paymentrecordMapper;
	@Autowired
	OrderfromServices orderfromServices;

	/**
	 * 返回回款记录的一些信息
	 * 
	 * @param oid
	 * @return
	 */
	public JSONObject findByOidItem(Integer oid) {
		// 准备一个容器，放入可汇款剩余百分比，以及期数
		JSONObject mback = new JSONObject();

		// 查询对应订单id的订单信息,并放入
		JSONObject findByIds = formMapper.findByIds(oid);
		mback.put("orderText", findByIds);
		// 放入总金额
		mback.put("sumMoney", findByIds.getDoubleValue("o_summoney"));
		// 放入回款负责人
		JSONArray arrays = new JSONArray();
		JSONObject obj = new JSONObject();
		obj.put("value", findByIds.getDoubleValue("use_id"));
		obj.put("label", findByIds.getString("use_name"));
		arrays.add(obj);
		mback.put("backMan", arrays);

		// 查询回款记录
		JSONArray harrays = new JSONArray();
		// 已经回款的记录
		JSONArray payback = new JSONArray();
		List<JSONObject> findItemByOId = mapper.findItemByOId(oid);
		if (findItemByOId != null && findItemByOId.size() > 0) {
			// 当存在回款记录时
			// 记录期次
			int i = 0;
			// 记录百分比,剩余百分比
			int baif = 0, endf = 0;

			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			for (JSONObject jsonObject : findItemByOId) {
				System.out.println("回款记录：" + jsonObject);
				i = jsonObject.getIntValue("mb_period");
				baif += jsonObject.getIntValue("mb_percentage");

				String date = jsonObject.getString("mb_date");

				Date parse;
				try {
					parse = format.parse(date);
					System.out.println(format.format(parse));
					jsonObject.put("mb_date", format.format(parse).toString());// 转换时间格式
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				harrays.add(jsonObject);// 将汇款记录全部存进去
				// 已回款的记录
				List<JSONObject> findByid = paymentrecordMapper.findByid(jsonObject.getInteger("mb_plan"));
				if (findByid != null && findByid.size() > 0) {
					for (JSONObject jsonObject2 : findByid) {
						System.err.println("这里他妈的时回款陈工的：" + jsonObject2);
						String date2 = jsonObject2.getString("pr_date");

						Date parse2;
						try {
							parse2 = format.parse(date2);
							System.out.println(format.format(parse2));
							jsonObject2.put("pr_date", format.format(parse2).toString());// 转换时间格式
						} catch (ParseException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}

						jsonObject2.put("themoney", jsonObject.getBigDecimal("mb_moneys"));
						jsonObject2.put("theqi", jsonObject.getBigDecimal("mb_period"));

						payback.add(jsonObject2);
					}
				}

			}
			mback.put("hkitem", harrays);// 回款记录List
			mback.put("paykitem", payback);// 已回款记录List
			endf = 100 - baif;


			mback.put("endf", endf);//剩余的百分比不是数组
			System.err.println("剩余的百分比不是数组"+endf);
			int ase = endf / 10;
			JSONArray array = new JSONArray();
			for (int j = 0; j < ase; j++) {
				if (endf > 0) {
					JSONObject ob = new JSONObject();
					ob.put("baif", endf);
					array.add(ob);
					endf -= 10;
				}
			}
			mback.put("baifItem", array);// 放入剩余可用百分比
			mback.put("period", i + 1);// 每次的期数是最大期数加一
		} else {
			int num = 100;
			JSONArray array = new JSONArray();
			for (int j = 0; j < 10; j++) {

				JSONObject ob = new JSONObject();
				ob.put("baif", num);
				array.add(ob);
				num -= 10;
			}
			mback.put("baifItem", array);// 放入剩余可用百分比
			mback.put("period", 1);// 初始期数为1

			mback.put("endf", 100);//剩余的百分比不是数组
			System.err.println("剩余的百分比不是数组"+100);
		}

		System.out.println(mback);
		return mback;
	}

	/**
	 * 添加一条汇款计划
	 * 
	 * @param cid
	 * @param oid
	 * @param havetime
	 * @param period
	 * @param percentage
	 * @param money
	 * @param user
	 */
	public void doinsertBack(Integer cid, Integer oid, Date havetime, Integer period, Integer percentage,
			BigDecimal money, Integer user, Integer status, String deschui) {

		try {
			int insertInto = mapper.insertInto(cid, oid, havetime, period, percentage, money, user, status, deschui);
			if (insertInto > 0) {
				System.out.println("成功");

			} else {
				System.out.println("失败");
			}
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("失败");
		}

	}

	/**
	 * 查询一条回款计划
	 * 
	 * @param id
	 * @return
	 */
	public JSONObject findByMoneyBack(Integer id) {
		// 查询对应id的回款计划
		JSONObject findByMid = mapper.findByMid(id);
		String date = findByMid.getString("mb_date");

		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date parse;
		try {
			parse = format.parse(date);
			System.out.println(format.format(parse));
			findByMid.put("mb_date", format.format(parse).toString());// 转换时间格式
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("這是要回显到回款计划的东西" + findByMid);
		return findByMid;
	}

	/**
	 * 添加一条回款记录
	 * 
	 * @param paytypes
	 * @param jid
	 * @param havetime
	 * @param status
	 * @param deschui
	 * @return
	 */
	public void inserBackEnd(Integer paytypes, Integer jid, Date havetime, Integer status, String deschui) {
		try {
			int insertInto = paymentrecordMapper.doInsert(paytypes, jid, new Date(), status, deschui);
			mapper.updateMoneyBackStatus(jid, 1);// 修改當前回款计划的状态
			if (insertInto > 0) {
				System.out.println("成功");

			} else {
				System.out.println("失败");
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

	/**
	 * 删除一个回款计划
	 * 
	 * @param id
	 */
	public void delteHuikuanjihua(Integer id) {

		// 删除记录
		List<JSONObject> findByid = paymentrecordMapper.findByid(id);
		if (findByid.size() > 0 && findByid != null) {
			for (JSONObject jsonObject : findByid) {
				paymentrecordMapper.delet(jsonObject.getInteger("pr_id"));
			}
		}
		// 修改订单状态
		System.out.println(id);
		JSONObject findByMids = mapper.findByMid(id);
		if (findByMids != null) {
			System.out.println(findByMids);
			formMapper.updateOrderNo(findByMids.getInteger("o_id"));
		}

		// 删除回款计划
		mapper.deleteById(id);

	}

	/**
	 * 删除一个回款记录
	 * 
	 * @param id
	 */
	public void delteHuikuanjilu(Integer id) {
		// 修改其回款计划的状态
		JSONObject findByPrid = paymentrecordMapper.findByPrid(id);
		mapper.updateMoneyBackStatus(findByPrid.getInteger("mb_id"), 0);
		// 修改订单状态
		JSONObject findByMid = mapper.findByMid(findByPrid.getInteger("mb_id"));
		if (findByMid != null) {
			formMapper.updateOrderNo(findByMid.getInteger("o_id"));
		}
		// 删除记录
		paymentrecordMapper.delet(id);
	}

}
